package com.alibaba.markovdemo.engine.AI.FMM;

import java.util.HashMap;

public class Segmentation {

	private String tem = null;
	private HashMap mapDic, len;

	public Segmentation(HashMap mapDic, HashMap len) {
		this.mapDic = mapDic;
		this.len = len;
	}

	/**
	 * 函数功能:分词算法
	 * @param source
	 * @return
     */
	public String Fmm(String source) {
		String[] targets = new String[source.length()];
		String target = "";
		int MaxLen = source.length();
		int temLen = MaxLen;
		int primarylen = 0;
		try{

			while (true) {
				if (temLen<0){
					break;
				}
				if (len.containsKey(temLen-primarylen)) {

					tem = source.substring(primarylen, temLen);
					if (mapDic.containsKey(tem) || temLen - primarylen == 1) {
						primarylen = temLen;
						temLen = MaxLen;
						if (primarylen == MaxLen)
							target = target + tem;
						else
							target = target + tem + "/";
					} else
						temLen--;
				} else
					temLen--;

				if (primarylen == MaxLen)
					break;
			}
		}catch (Exception e){
			e.printStackTrace();
		}

		return target;
	}

	public String Bmm(String source) {
		String[] targets = new String[source.length()];
		String target="";
		int MaxLen = source.length();
		int temLen = MaxLen;
		int primarylen = 0;
		int i=0;
		while (true) {
			if (len.containsKey(temLen)) {
				tem = source.substring(primarylen, temLen);
				if (mapDic.containsKey(tem)||temLen-primarylen==1) {
					if (temLen == MaxLen){
						targets[i] = tem;
						}
					else{
						tem = tem+"/";
					targets[i] = tem;
					}
					temLen = primarylen;
					primarylen = 0;
					i++;
				} else
					primarylen++;
			} else
				primarylen++;
			if (temLen == 0)
				break;
		}
		
		for(int j=i-1;j>=0;j--)
			target+=targets[j];
		return target;
	}

}
